#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project ：图灵学习 
@File    ：14.线程中的锁对象.py
@IDE     ：PyCharm 
@Author  ：ChenLiGao
@Date    ：2024-11-01 10:06
'''
import threading

num = 0
lock1 = threading.Lock() # 同步互斥锁
lock2 = threading.RLock() # 递归互斥锁

"""
同步互斥锁：
    等待这个锁对象解锁了之后才能继续上锁，这样会造成死锁，如果同时加两次上锁第二个锁就会一直等待第一个锁释放，就会死锁，
    最快的时同步互斥锁
递归互斥锁：
    就不会有上诉问题，可以连续上多次锁，但是需要注意，就需要连续解锁多次，
    但是递归锁有代价，会很慢
"""

def add():
    global num
    for i in range(10):
        lock1.acquire()
        lock2.acquire()
        num += i
        lock1.release()
        lock2.release()
        print(f"加法的结果：{num}")


def sub():
    global num
    for i in range(10):
        lock1.acquire()
        lock2.acquire()
        num -= i
        lock1.release()
        lock2.release()
        print(f"减法的结果：{num}")

t1 = threading.Thread(target=add)
t2 = threading.Thread(target=sub)

t1.start()
t2.start()

t1.join()
t2.join()

print(f"最终结果：{num}")